package escenario;

import java.util.ArrayList;

import concurrencia.MonitorEspacio;

import sistemaDefensivo.BateriaDeMisiles;
import sistemaDefensivo.MisilDefensor;
import sistemaDefensivo.ServidorTerrestre;
import sistemaDefensivo.SistemaBateriaMisiles;
import sistemaDefensivo.SistemaDeRadar;
import sistemaEnemigo.GeneradorMisilesEnemigos;
import sistemaEnemigo.MisilEnemigo;

import escenario.Escenario;

public class Escenario {
	private ArrayList <BateriaDeMisiles> bateriaDeMisiles;
	private GeneradorMisilesEnemigos generadorMisilesEnemigos;
	private ArrayList <MisilDefensor> misilesDefensores;

	private MonitorEspacio posEnemigos;

	
	private SistemaDeRadar radar;
	private ServidorTerrestre servidorTerrestre;
	private SistemaBateriaMisiles sistemaBateriaMisiles;
	private CollisionDetector collisionDetector;

	public Escenario(){
		radar  = new SistemaDeRadar(this);
		servidorTerrestre = new ServidorTerrestre(this);
		sistemaBateriaMisiles = new SistemaBateriaMisiles(this);
		generadorMisilesEnemigos = new GeneradorMisilesEnemigos(this);
		bateriaDeMisiles = new ArrayList<BateriaDeMisiles>();
		misilesDefensores = new ArrayList <MisilDefensor>();

		collisionDetector = new CollisionDetector(this);
		
		posEnemigos = new MonitorEspacio();
	}

	public void addMisilDefensor(MisilDefensor MD){
		misilesDefensores.add(MD);
	}
	
	public MisilDefensor getMisilesDefensores(int pos) {
		return misilesDefensores.get(pos);
	}
	
	public int getSizeArrayMD(){
		return  misilesDefensores.size();
	}
	
	
	
	
	
    public void addMisilEnemigo(MisilEnemigo ME){
		posEnemigos.addMisilEnemigo(ME);
	}
    
	public void removeMisilEnemigo(MisilEnemigo ME){
		posEnemigos.removeMisilEnemigo(ME);
	}
	
    public void setMisilEnemigo(int pos, MisilEnemigo ME)
    {
        posEnemigos.setMisilEnemigo(pos, ME);
    }
	
	public MisilEnemigo getMisilEnemigo(int pos){
		return posEnemigos.getMisilEnemigo(pos);
	}
	
	public int getSizeArrayME(){
		return  posEnemigos.getSizeArrayME();
	}
	
	public void addPosEnemigo(IdPosEnemigo PE){
		posEnemigos.addPosEnemigo(PE);
	}
	
	public void removePosEnemigo(IdPosEnemigo PE){
		posEnemigos.removePosEnemigo(PE);
	}
	
	public void setPosEnemigo(int pos, IdPosEnemigo PE){
		posEnemigos.setPosEnemigos(pos, PE);
	}
	
	public IdPosEnemigo getPosEnemigo(int id)
	{
		return posEnemigos.getPosEnemigo(id);
	}
	
	public int getSizeArrayPosEnemigos(){
		return  posEnemigos.getSizeArrayPosEnemigos();
	}
		
	
	
	
	
	public void addBateriaDeMisiles(BateriaDeMisiles bateriaDeMisiles) {
		this.bateriaDeMisiles.add(bateriaDeMisiles);
	}
		
	public BateriaDeMisiles getBateriaDeMisiles(int pos) {
		return bateriaDeMisiles.get(pos);
	}

	public GeneradorMisilesEnemigos getGeneradorMisilesEnemigos() {
		return generadorMisilesEnemigos;
	}

	public SistemaDeRadar getRadar() {
		return radar;
	}

	public ServidorTerrestre getServidorTerrestre() {
		return servidorTerrestre;
	}

	public SistemaBateriaMisiles getSistemaBateriaMisiles() {
		return sistemaBateriaMisiles;
	}

	public void iniciarEscenario(){
		Thread hiloRadar = new Thread(radar);
		Thread hiloServidorT = new Thread(servidorTerrestre);
		Thread hilosistemaBM = new Thread(sistemaBateriaMisiles);
		Thread hiloGeneradorME = new Thread(generadorMisilesEnemigos);
		Thread hiloCollisionDetector = new Thread(collisionDetector);
	
		hiloRadar.start();
		hiloServidorT.start();
		hilosistemaBM.start();
		hiloGeneradorME.start();
		
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		hiloCollisionDetector.start();

		
	}
}